#!/bin/bash
###############################################################################
# @用例ID: 20230527-200746-819303993
# @用例名称: java_test
# @用例级别: 3
# @用例标签:
# @用例类型: 功能
###############################################################################
[ -z "$TST_TS_TOPDIR" ] && {
    TST_TS_TOPDIR="$(realpath "$(dirname "$0")/..")"
    export TST_TS_TOPDIR
}
source "${TST_TS_TOPDIR}/tst_common/lib/common.sh" || exit 1
###############################################################################

g_tmpdir="$(mktemp -d)"

tc_setup() {
    msg "this is tc_setup"
    # @预置条件:系统正常运行，且已安装 java-1.8.0-openjdk
    assert_true yum install -y java-1.8.0-openjdk

    # @预置条件:
    return 0
}

do_test() {
    msg "this is do_test"

    # 编写一个简单的 Java 程序文件
    cat > HelloWorld.java << EOF
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}
EOF

    # 编译 Java 程序
    assert_true javac HelloWorld.java

    # @测试步骤:1
    # 执行 Java 程序
    output=$(java HelloWorld)

    # @预期结果:1
    # 确保程序成功执行，并输出 "Hello, World!"
    assert_equals "$output" "Hello, World!"

    # @测试步骤:2
    # 执行 Java 程序，传递命令行参数
    output=$(java HelloWorld Argument1 Argument2)

    # @预期结果:2
    # 确保程序成功执行，并输出 "Hello, World!"，以及传递的命令行参数
    expected_output="Hello, World! Argument1 Argument2"
    assert_equals "$output" "$expected_output"

    # @测试步骤:3
    # 编写一个包含错误的 Java 程序文件
    cat > ErrorProgram.java << EOF
public class ErrorProgram {
    public static void main(String[] args) {
        System.out.println("This is an error");
        System.exit(1);
    }
}
EOF

    # 编译错误的 Java 程序
    assert_false javac ErrorProgram.java

    # @预期结果:3
    # 确保编译错误的程序失败
    assert_true [ 1 -eq 1 ]

    return 0
}



tc_teardown() {
    msg "this is tc_teardown"
    rm HelloWorld.java
    rm ErrorProgram.java  
    rm -rfv "$g_tmpdir" || return 1
    return 0
}

###############################################################################
tst_main "$@"
###############################################################################
